package com.atbeijing.bigdata.spark.core.wc

import org.apache.spark.{SparkConf, SparkContext}

// Driver类
object Spark03_WordCount {

    def main(args: Array[String]): Unit = {

        // TODO - Spark - WordCount

        // master : local => 1 thread
        // master : local[*] => 使用当前机器中最大的核数线程

        val conf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
        // 将创建Spark环境上下文对象的程序，称之为Driver程序
        val sc = new SparkContext(conf)
        val lines = sc.textFile("data/word.txt")
        val words = lines.flatMap( line => line.split(" "))
        val wordToOne = words.map(
            word => (word, 1)
        )

        // Spark提供了特殊的方法可以对分组聚合的操作进行简化 : reduceByKey

        // reduceByKey : 数据处理中，如果有相同的key吗，那么会对同一个key的value进行reduce操作
        // reduceByKey操作对处理的数据集有要求，要求数据集中的数据都是K-V键值对
        val wordCount = wordToOne.reduceByKey(_+_)

        wordCount.collect().foreach(println)
        //wordcount.foreach(println)

        // TODO 3. 关闭连接
        sc.stop()

    }
}
